package br.com.foxinline.manager.historico;

import br.com.foxinline.modelo.Imovel;
import br.com.foxinline.servico.ImovelServico;
import br.com.foxinline.servico.historico.ImovelHistoricoServico;
import br.com.foxinline.util.Msg;
import br.com.foxinline.vo.CamposVO;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author laverson
 */
@ViewScoped
@ManagedBean
public class ManagerHistoricoImovel {

    @EJB
    ImovelServico imovelServico;
    @EJB
    ImovelHistoricoServico imovelHistoricoServico;
    private List<Imovel> imovelHistoricos;
    private String historicoId;
    private Imovel imovelHistorico;
    private Imovel imovelHistoricoComparar;
    private List<CamposVO> campos;
    private Imovel imovelRestaurar;

    @PostConstruct
    public void init() {
        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.historicoId = params.get("historico");
        paramPost();
    }

    public void paramPost() {
        try {
            if (this.historicoId != null) {
                this.imovelHistoricos = imovelHistoricoServico.history(Long.parseLong(this.historicoId));
            }
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    /**
     * Compara se os campos do parâmetro bairro são diferentes do seu antecessor
     * na lista de bairros do histórico. Grava os campos e os seus valores para
     * exibição
     *
     * <br/> <p> <b>Author:</b> Diego Laverson</p>
     *
     * @param imovel
     */
    public void comparar(Imovel imovel) {

        int index = imovelHistoricos.indexOf(imovel);

        if (index == imovelHistoricos.size() - 1) {
            this.imovelHistoricoComparar = imovelServico.find(Long.parseLong(this.historicoId));
        } else {
            this.imovelHistoricoComparar = this.imovelHistoricos.get(index + 1);
        }

        this.imovelHistorico = (Imovel) imovelHistoricoServico.comparar(imovel, this.imovelHistoricoComparar, false);
        this.imovelHistorico.setDataAtualizacao(imovel.getDataAtualizacao());

        this.campos = imovelHistoricoServico.getCampos();
    }

    /**
     * Restaura os dados que foram modificados com relação ao
     * <b>imovelRestaurar</b> e o imovel que está sendo verificado o histórico
     *
     * <br/> <p> <b>Author:</b> Diego Laverson</p>
     */
    public void restaurar() {
        try {

            Imovel imovel = imovelServico.find(Long.parseLong(this.historicoId));

            imovel = (Imovel) imovelHistoricoServico.comparar(this.imovelRestaurar, imovel, true);

//            imovelServico.update(imovel);

            Msg.messagemInfo(Msg.SuccessFull);

        } catch (Exception e) {
            System.err.println(e);
            Msg.messagemError(Msg.Failure);
        }
    }

    public List<Imovel> getImovelHistoricos() {
        return imovelHistoricos;
    }

    public void setImovelHistoricos(List<Imovel> historico) {
        this.imovelHistoricos = historico;
    }

    public Imovel getImovelHistoricoComparar() {
        return imovelHistoricoComparar;
    }

    public void setImovelHistoricoComparar(Imovel bairroHistoricoComparar) {
        this.imovelHistoricoComparar = bairroHistoricoComparar;
    }

    public List<CamposVO> getCampos() {
        return campos;
    }

    public void setCampos(List<CamposVO> campos) {
        this.campos = campos;
    }

    public Imovel getImovelRestaurar() {
        return imovelRestaurar;
    }

    public void setImovelRestaurar(Imovel bairroRestaurar) {
        this.imovelRestaurar = bairroRestaurar;
    }

    public Imovel getImovelHistorico() {
        return imovelHistorico;
    }

    public void setImovelHistorico(Imovel bairroHistorico) {
        this.imovelHistorico = bairroHistorico;
    }
}
